package cn.wzptsoft.tinymallbe.controller;

import cn.wzptsoft.common.utils.JwtUtils;
import cn.wzptsoft.common.utils.Result;
import cn.wzptsoft.tinymallbe.entity.User;
import cn.wzptsoft.tinymallbe.entity.UserLoginDTO;
import cn.wzptsoft.tinymallbe.service.UserService;
import cn.wzptsoft.tinymallbe.vo.TokenVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("user")
public class LoginController {
    @Autowired
    private UserService userService;

//    用户登录
    @PostMapping("/login")
    public Result<TokenVO> login( @Valid UserLoginDTO userLoginParam){
        //public Result<TokenVO> login(@RequestBody @Valid UserLoginDTO userLoginParam){
        User user=userService.login(userLoginParam);
        String jwt = JwtUtils.generateToken(user.getId());
        TokenVO token = new TokenVO(jwt);
        return Result.ok(token);
    }

    //    用户注册
    @PostMapping("/register")
    public Result<TokenVO> register( @Valid User user){
        User register = userService.register(user);
        /*
        * JwtUtils.generateToken() 方法的作用是生成一个 JWT 令牌
        * user.getId() 是负载部分的数据，表示该令牌所代表的用户身份。
        * 生成的 JWT 令牌被存储在一个字符串类型的 jwt 变量中。
        * 使用 new TokenVO(jwt) 的方式，将令牌封装在一个 TokenVO 对象中，
        * 以便于返回给客户端和进行后续的操作。*/
        String jwt = JwtUtils.generateToken(register.getId());
        TokenVO token = new TokenVO(jwt);
        return Result.ok(token);
    }

    //    用户信息
    @PostMapping("/info")
    public Result<User> info(String username){
        User user=userService.info(username);
        return Result.ok(user);
    }
}
